package cn.com.blueInfo.bpm.template.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.template.enums.ProcessNodeDraftFlag;
import cn.com.blueInfo.bpm.template.enums.ProcessNodeType;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 模板节点定义表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:41:15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "模板节点定义 接收参数及校验")
public class ProcessNodeDTO extends BaseDTO {

    /** 流程模板ID */
    @NotNull(message = "流程模板ID 不能为空")
    @Schema(description = "流程模板ID")
    private Long processId;
    /** 节点编码 */
    @NotBlank(message = "节点编码 不能为空")
    @Schema(description = "节点编码")
    private String nodeCode;
    /** 节点名称 */
    @NotBlank(message = "节点名称 不能为空")
    @Schema(description = "节点名称")
    private String nodeName;
    /** 节点类型：DRAFT-起草节点，APPROVE-审批节点，CC-抄送节点，END-结束节点 */
    @NotNull(message = "节点类型 不能为空")
    @Schema(description = "节点类型：DRAFT-起草节点，APPROVE-审批节点，CC-抄送节点，END-结束节点")
    private ProcessNodeType nodeType;
    /** 是否起草节点：1-是，0-否，仅在node_type=DRAFT时有效 */
    @NotNull(message = "是否起草节点 不能为空")
    @Schema(description = "是否起草节点：1-是，0-否，仅在node_type=DRAFT时有效")
    private ProcessNodeDraftFlag draftFlag;
    /** 处理人规则 */
    @Schema(description = "处理人规则")
    private JSONObject participantRule;
    /** 节点关联表单ID（覆盖流程模板的form_id，支持节点级表单定制） */
    @Schema(description = "节点关联表单ID（覆盖流程模板的form_id，支持节点级表单定制）")
    private Long formId;
    /** 节点载入后执行的函数 */
    @Schema(description = "节点载入后执行的函数")
    private String nodeLoadFunc;
    /** 单击节点时执行的函数 */
    @Schema(description = "单击节点时执行的函数")
    private String clickNodeFunc;
    /** 扩展标识（如“需要电子签名”“需打印”等） */
    @Schema(description = "扩展标识（如“需要电子签名”“需打印”等）")
    private String extendSign;

    /**
     * 模板节点定义 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "模板节点定义 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 流程模板ID */
        @Schema(description = "流程模板ID")
        private Long processId;
        /** 节点编码 */
        @Schema(description = "节点编码")
        private String nodeCode;
        /** 节点名称 */
        @Schema(description = "节点名称")
        private String nodeName;
        /** 节点类型：DRAFT-起草节点，APPROVE-审批节点，CC-抄送节点，END-结束节点 */
        @Schema(description = "节点类型：DRAFT-起草节点，APPROVE-审批节点，CC-抄送节点，END-结束节点")
        private ProcessNodeType nodeType;
        /** 是否起草节点：1-是，0-否，仅在node_type=DRAFT时有效 */
        @Schema(description = "是否起草节点：1-是，0-否，仅在node_type=DRAFT时有效")
        private ProcessNodeDraftFlag draftFlag;
        /** 处理人规则 */
        @Schema(description = "处理人规则")
        private JSONObject participantRule;
        /** 节点关联表单ID（覆盖流程模板的form_id，支持节点级表单定制） */
        @Schema(description = "节点关联表单ID（覆盖流程模板的form_id，支持节点级表单定制）")
        private Long formId;
        /** 节点载入后执行的函数 */
        @Schema(description = "节点载入后执行的函数")
        private String nodeLoadFunc;
        /** 单击节点时执行的函数 */
        @Schema(description = "单击节点时执行的函数")
        private String clickNodeFunc;
        /** 扩展标识（如“需要电子签名”“需打印”等） */
        @Schema(description = "扩展标识（如“需要电子签名”“需打印”等）")
        private String extendSign;

    }

    /**
     * 模板节点定义 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "模板节点定义 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {

        /** 处理人规则 */
        @Schema(description = "处理人规则")
        private JSONObject participantRule;
        /** 节点关联表单ID（覆盖流程模板的form_id，支持节点级表单定制） */
        @Schema(description = "节点关联表单ID（覆盖流程模板的form_id，支持节点级表单定制）")
        private Long formId;
        /** 节点载入后执行的函数 */
        @Schema(description = "节点载入后执行的函数")
        private String nodeLoadFunc;
        /** 单击节点时执行的函数 */
        @Schema(description = "单击节点时执行的函数")
        private String clickNodeFunc;
        /** 扩展标识（如“需要电子签名”“需打印”等） */
        @Schema(description = "扩展标识（如“需要电子签名”“需打印”等）")
        private String extendSign;

    }

}